perm filename BATCH2.SAI[DIA,HPM] blob
sn#508927 filedate 1980-05-11 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00006 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN "BATCH2"
C00006 00003 BEGIN "LOGIC"
C00014 00004 BEGIN "PACKAGES"
C00016 00005 BEGIN "BOARDS"
C00018 00006
C00019 ENDMK
C⊗;
BEGIN "BATCH2"
REQUIRE "CIRCUT.SAI[GOD,HPM]" SOURCE_FILE;
INTEGER N; BOOLEAN BENDY;
INTEGER FJ,I,J,K;
RECURSIVE INTEGER PROCEDURE BITONIC(INTEGER N; REAL X,Y);
IF N=1 THEN RETURN(SORTER(X+2,Y)) ELSE
BEGIN
INTEGER M,I,B1,B2;
INTEGER ARRAY SPL[1:M←1 ASH (N-1)];
FOR I←1 STEP 1 UNTIL M DO SPL[I]←SORTER(X+2,Y+2*(M-I));
B1←BITONIC(N-1,X+5,Y+M);
B2←BITONIC(N-1,X+5,Y);
FREEBOD←FREEBOD+2*M;
FOR I←1 STEP 1 UNTIL M DO
BEGIN
WIRE(SPL[I]+1,B1-I);
WIRE(SPL[I]+2,B2-I);
IF BENDY THEN
BEGIN
XBOD[FREEBOD-2*I+1]←X; YBOD[FREEBOD-2*I+1]←YBOD[SPL[I]-1];
XBOD[FREEBOD-2*I]←X; YBOD[FREEBOD-2*I]←YBOD[SPL[I]-2];
END;
END;
XBOD[FREEBOD]←X; YBOD[FREEBOD]←Y;
FOR I←1 STEP 1 UNTIL M DO
BEGIN
IF BENDY THEN
BEGIN
WIRE(FREEBOD-I,SPL[I]-1);
WIRE(FREEBOD-I-M,SPL[I]-2);
END
ELSE
BEGIN
XBOD[FREEBOD-I]←XBOD[SPL[I]-1]; YBOD[FREEBOD-I]←YBOD[SPL[I]-1];
XBOD[FREEBOD-I-M]←XBOD[SPL[I]-2]; YBOD[FREEBOD-I-M]←YBOD[SPL[I]-2];
END;
XBOD[FREEBOD+I] ←XBOD[B1+I]; YBOD[FREEBOD+I] ←YBOD[B1+I];
XBOD[FREEBOD+I+M]←XBOD[B2+I]; YBOD[FREEBOD+I+M]←YBOD[B2+I];
END;
FREEBOD←FREEBOD+2*M+1;
RETURN(FREEBOD-2*M-1);
END;
INTEGER PROCEDURE PACKAGE(INTEGER N; REAL XPOS,YPOS);
BEGIN
INTEGER NCOPY,HGT,I,J,NPIN,BT,PK; REAL XP,YP;
LINE(XPOS,YPOS,XPOS,YPOS+17,7);
LINE(XPOS+26,YPOS+17,XPOS,YPOS+17,7);
LINE(XPOS+26,YPOS+17,XPOS+26,YPOS,7);
LINE(XPOS,YPOS,XPOS+26,YPOS,7);
PK←FREEBOD+16;
FREEBOD←FREEBOD+33;
FOR I←1 STEP 1 UNTIL 16 DO
BEGIN
LINE(XPOS-1,YPOS+16-(I-1),XPOS+.5,YPOS+16-(I-1),3);
DOT(XPOS,YPOS+16-(I-1),11);
LINE(XPOS+25.5,YPOS+16-(I-1),XPOS+27,YPOS+16-(I-1),3);
DOT(XPOS+26,YPOS+16-(I-1),11);
XBOD[PK-I]←XPOS+.5; YBOD[PK-I]←YPOS+16-(I-1);
XBOD[PK+I]←XPOS+25.5; YBOD[PK+I]←YPOS+16-(I-1);
END;
XBOD[PK]←XPOS; YBOD[PK]←YPOS;
NCOPY←1 ASH (4-N); HGT←1 ASH N; NPIN←1 ASH N;
XP←(15-N*5+2)/2+.5+4+2;
YP←(NCOPY-1)*HGT+1;
FOR I←1 STEP 1 UNTIL NCOPY DO
BEGIN
BT←BITONIC(N,XP+XPOS,YP+YPOS);
YP←YP-HGT;
FOR J←1 STEP 1 UNTIL NPIN DO
BEGIN
WIRE(BT-J,PK-((I-1)*NPIN+J));
WIRE(BT+J,PK+((I-1)*NPIN+J));
END;
END;
FOR I←1 STEP 1 UNTIL 16 DO
BEGIN
XBOD[PK-I]←XPOS-1;
XBOD[PK+I]←XPOS+27;
END;
RETURN(PK);
END;
BEGIN "LOGIC"
INTEGER AGB,AEB,ALB,A,B,NA,NB,AL,BL,AGBG,AEBG,ALBG,CK,NCK,AGBL,AEBL,ALBL,
EL1,EL2,EL3,EL4,ELN,TP,RS,DN,CI,RI,SAH,SBH,SAL,SBL,SH,SL,
HL,LL,HN,LN,H,L,TPH,TPL,RSN;
FJ←FILJOB("BATCH7.GOD[DIA,HPM]");
FNTSELECT(2,"METMBM");
FNTSELECT(3,"METSBM");
DDINIT;
SCREEN(-5,-15,35,10);
LITEN;
A←TMPPOINT(-2.5,8.3);
B←TMPPOINT(-2.5,-8.3);
CK←TIEPOINT(26,-10);
CI←TMPPOINT(26,-12);
RS←TMPPOINT(16,-10);
RI←TMPPOINT(16,-12);
H←TMPPOINT(33,3.7);
L←TMPPOINT(33,-3.7);
FNTPOS(XBOD[A],YBOD[A]); DEPOSIT(-5,-5,YCENTER(RIGHTIFY(JTXT(2,"A"))));
FNTPOS(XBOD[B],YBOD[B]); DEPOSIT(-5,-5,YCENTER(RIGHTIFY(JTXT(2,"B"))));
FNTPOS(XBOD[L],YBOD[L]); DEPOSIT(5,-5,YCENTER(LEFTIFY(JTXT(2,"H"))));
FNTPOS(XBOD[H],YBOD[H]); DEPOSIT(5,-5,YCENTER(LEFTIFY(JTXT(2,"L"))));
comment i changed my mind about which was high and low;
FNTPOS(XBOD[RI],YBOD[RI]);
DEPOSIT(0,-5,XCENTER(TOPIFY(JTXT(2,"Reset"))));
FNTPOS(XBOD[CI],YBOD[CI]);
DEPOSIT(0,-5,XCENTER(TOPIFY(JTXT(2,"Clock"))));
NA←NOTGATED(.75,7); WIRE(A,NA-1,BELBOW);
NB←NOTGATEU(.25,-7); WIRE(B,NB-1,BELBOW);
AGB←NANDGATE(2,.75);
COMMENT AEB←EQVGATE(4,0);
ALB←NANDGATE(2,-.75);
WIRE(A,AGB-1,1.5,BBLOB,ELBOW);
WIRE(NB+1,AGB-2,0,BELBOW);
WIRE(NA+1,ALB-1,0,BELBOW);
WIRE(B,ALB-2,1.5,BBLOB,ELBOW);
AL←LATCH(8.5,7);
BL←LATCH(8.5,-7);
WIRE(A,AL-1,ELBOW,0,2);
WIRE(B,BL-2,ELBOW,0,2);
WIRE(NA+1,AL-2,0,BELBOW);
WIRE(NB+1,BL-1,0,BELBOW);
AGBG←NANDGATE(5.5,3,4);
AEBG←NANDGATE(5.5,0,4);
ALBG←NANDGATE(5.5,-3,4);
WIRE(A,AGBG-2,1.5,BELBOW);
WIRE(NB+1,AGBG-3,0,ELBOW);
WIRE(B,ALBG-3,1.5,BELBOW);
WIRE(NA+1,ALBG-2,0,ELBOW);
WIRE(AGB+1,AEBG-2,.5);
COMMENT WIRE(AEB+1,AEBG-2);
WIRE(ALB+1,AEBG-3,.5);
NCK←NOTGATEL(10,-10);
WIRE(CI,CK+0);
WIRE(RI,RS+0);
WIRE(CK,NCK-1);
WIRE(NCK+1,BL-4,ELBOW,BLOB,2.25);
WIRE(NCK+1,BL-3,ELBOW,BLOB,2.25);
WIRE(NCK+1,AL-4,ELBOW,BLOB,2.25);
WIRE(NCK+1,AL-3,ELBOW,0,2.25);
WIRE(NCK+1,AGBG-1,ELBOW,0,BBLOB,.75);
WIRE(NCK+1,AEBG-1,ELBOW,0,BBLOB,.75);
WIRE(NCK+1,ALBG-1,ELBOW,0,BBLOB,.75);
AGBL←NANDGATE(10,2,4);
AEBL←NANDGATE(10,0,4);
ALBL←NANDGATE(10,-2,4);
WIRE(AGBG+1,AEBL-3,ELBOW,BLOB,1.25);
WIRE(AGBG+1,ALBL-2,ELBOW,0,1.25);
WIRE(AEBG+1,AGBL-2,BELBOW,0,2.25);
WIRE(AEBG+1,ALBL-3,BELBOW,0,2.25);
WIRE(ALBG+1,AEBL-4,ELBOW,BLOB,1.75);
WIRE(ALBG+1,AGBL-3,ELBOW,0,1.75);
WIRE(AGBL+1,AEBL-2,0,-1,ELBOW,BLOB,.75);
WIRE(ALBL+1,AEBL-1,0,1,ELBOW,BLOB,.25);
WIRE(AEBL-2,ALBL-1,-.75,ELBOW);
WIRE(AEBL-1,AGBL-4,-.25,ELBOW);
WIRE(AEBL+1,ALBL-4,.5,BBLOB,ELBOW,0,.7);
WIRE(AEBL+1,AGBL-1,.5,ELBOW,0,-.7);
EL1←NANDGATE(14+.5,-2-.3);
EL2←NANDGATE(14+.5,0-.3);
EL3←NANDGATE(17+.5,-2-.3,3);
EL4←NANDGATE(17+.5,0-.3);
WIRE(EL2+1,EL4-1,.5);
WIRE(EL1+1,EL3-2,.5);
WIRE(EL4+1,EL3-1,0,-.6,LOOSE,-.4,.2);
WIRE(EL3+1,EL4-2,0,.6,LOOSE,.4,.2);
WIRE(CK,EL1-1,BELBOW,BLOB,.25);
WIRE(CK,EL2-2,ELBOW,0,.25);
ELN←NOTGATED(12.5,-1.3);
TP←TIEPOINT(12.5,0);
WIRE(AEBL+1,TP,ELBOW); WIRE(TP,EL2-1,0,ELBOW);
WIRE(TP,ELN-1);
WIRE(ELN+1,EL1-2,0,ELBOW);
RSN←NOTGATEU(XBOD[RS],-6);
WIRE(RS,RSN-1);
WIRE(RSN+1,EL3-3,0,ELBOW);
WIRE(EL3+1,ALBG-4,BLOB,-2,ELBOW,BLOB,.25);
WIRE(EL3+1,AEBG-4,0,-2,ELBOW,BLOB,.25);
WIRE(EL3+1,AGBG-4,0,-2,ELBOW,0,.25);
DN←NOTGATE(16,2);
WIRE(AGBL+1,DN-1,BLOB);
SAH←NANDGATE(22,3.7);
SBH←NANDGATE(22,1.7);
SH←NANDGATE(24,3.4);
WIRE(SAH+1,SH-1,.1);
WIRE(SBH+1,SH-2,.1);
SAL←NANDGATE(22,-1.7);
SBL←NANDGATE(22,-3.7);
SL←NANDGATE(24,-3.4);
WIRE(SAL+1,SL-1,.1);
WIRE(SBL+1,SL-2,.1);
WIRE(AL+1,SAH-1,BBLOB,ELBOW,BLOB,.25);
WIRE(BL+2,SBL-2,BBLOB,ELBOW,BLOB,.75);
WIRE(AL+1,SAL-1,ELBOW,0,.25);
WIRE(BL+2,SBH-2,ELBOW,0,.75);
WIRE(DN+1,SBH-1,BELBOW,0,1.25);
WIRE(DN+1,SAL-2,BELBOW,0,1.25);
WIRE(AGBL+1,SAH-2,3,BBLOB,ELBOW);
WIRE(SAH-2,SBL-1,BELBOW,0,1.75);
HL←LATCH(29,4.7);
LL←LATCH(29,-4.7);
HN←NOTGATEU(25,4.7);
LN←NOTGATED(25,-4.7);
WIRE(HN+1,HL-1,0);
TPH←TIEPOINT(XBOD[HN-1],YBOD[HL-2]);
WIRE(TPH,HN-1);
WIRE(TPH,HL-2);
WIRE(LN+1,LL-2,0);
TPL←TIEPOINT(XBOD[LN-1],YBOD[LL-1]);
WIRE(TPL,LN-1);
WIRE(TPL,LL-1);
WIRE(SL+1,TPL,ELBOW);
WIRE(SH+1,TPH,ELBOW);
WIRE(HL+2,H,BLOB);
WIRE(LL+1,L,BLOB);
WIRE(CK,LL-3,0,BELBOW);
WIRE(CK,LL-4,0,BELBOW);
WIRE(CK,HL-4,0,BELBOW);
WIRE(CK,HL-3,0,ELBOW);
DPYUP(-1); KILJOB(FJ);
END "LOGIC";
BEGIN "PACKAGES"
FJ←FILJOB("BATCH8.GOD[DIA,HPM]");
DDINIT;
BENDY←FALSE;
SCREEN(-10,-2,133,18);
LITEN;
FOR I←1 STEP 1 UNTIL 4 DO
BEGIN
INTEGER ARRAY BODS[0:7,1:I];
CIRINI;
FOR J←1 STEP 1 UNTIL I DO PACKAGE(5-I,33*(I-1),0);
END;
DPYUP(-1);
KILJOB(FJ);
END "PACKAGES";
BEGIN "BOARDS"
PROCEDURE TWOLAYER(INTEGER N1,N2; REAL X,Y);
BEGIN
INTEGER NC;
INTEGER ARRAY D,O[0:(NC←2↑N1)-1], INP[0:16*NC-1];
INTEGER I,J;
FOR I←0 STEP 1 UNTIL NC-1 DO
BEGIN
D[I]←PACKAGE(N1,X+80,Y+(NC-1-I)*20);
O[I]←PACKAGE(N2,X+160,Y+(NC-1-I)*20);
FOR J←0 STEP 1 UNTIL 15 DO
INP[I*16+J]←TMPPOINT(26,YBOD[D[I]-J-1]);
END;
FOR I←0 STEP 1 UNTIL 16*NC-1 DO
BEGIN
WIRE(D[I%16]-(I MOD 16)-1,INP[16*(I MOD NC)+I%NC]);
WIRE(D[I%16]+(I MOD 16)+1,O[I MOD NC]-I%NC-1);
END;
END;
FJ←FILJOB("BATCH9.GOD[DIA,HPM]");
BENDY←FALSE;
DDINIT;
SCREEN(12,-23,400,60);
CIRINI;
TWOLAYER(1,4,0,0);
SCREEN(-188,-3,200,80);
CIRINI;
TWOLAYER(2,4,0,0);
" SCREEN(12,-3,200,160);
CIRINI;
TWOLAYER(3,4,0,0)";
DPYUP(-1);
KILJOB(FJ);
FJ←DDJOB; GRAFIL("BATCH9.GOD[DIA,HPM]");
CALL(0,"SNEAKW"); KILJOB(FJ);
END "BOARDS";
END "BATCH2";